package Day007_Collection_泛型_数据结构.Demo05_泛型通配符;

/*       通配符高级使用:受限泛型
            ? super xxx :  限制类型为xxx类型,或者xxx类型的父类类型 -- 上限
            ? extends xxx: 限制类型为xxx类型,或者继承xxx类型的子类类型 -- 下限
*/


import java.util.ArrayList;

public class Test1 {
    public static void main(String[] args) {

        //创建一个集合,限制集合元素类型为String
        ArrayList<String> list1 = new ArrayList<>();
        //创建一个集合,限制集合元素类型为Integer  Integer类继承Number类
        ArrayList<Integer> list2 = new ArrayList<>();
        //创建一个集合,限制集合元素类型为Object
        ArrayList<Object> list3 = new ArrayList<>();

        method1(list1);
       // method1(list2);//编译报错
        method1(list3);
    //-----------------------------------------------------------------------
        //创建一个集合,限制集合元素类型为String
        ArrayList<Person> list4 = new ArrayList<>();
        //创建一个集合,限制集合元素类型为Integer  Integer类继承Number类
        ArrayList<Student> list5 = new ArrayList<>();
        //创建一个集合,限制集合元素类型为Object
        ArrayList<Teacher> list6 = new ArrayList<>();

        method2(list4);
        method2(list5);
        method2(list5);
        //method2(list3);//编译报错

    }

    //要求:方法的参数只能接收集合中的元素类型为:String类型或者String的父类类型
    //list1 list3
    public static void method1(ArrayList<? super String> list) {  //上限
        for (Object o : list) {
            System.out.println(o);
        }
    }

    //要求:方法的参数只能接收集合中的元素类型为:Person类型或者Person的子类类型
    public static void method2(ArrayList<? extends Person> list){  //下限

    }
}


class Person{}

class Student extends Person{}

class Teacher extends Person{}